home *** CD-ROM | disk | FTP | other *** search
/ By Popular Request 2.0 / By Popular Request 2.0 (Arsenal Computer).ISO / amiga_2 / cdrexmpl.lha / door.c next >
C/C++ Source or Header  |  1991-11-11  |  7KB  |  291 lines

  1. #include <exec/types.h>
  2. #include <exec/exec.h>
  3. #include <stdio.h>
  4. #include <fcntl.h>
  5.  
  6. struct DoorMsg {
  7.     struct Message Door_Msg;
  8.     short command;
  9.     short data;
  10.     char string[80];
  11.     short carrier;
  12.     };
  13.  
  14. struct DoorMsg *doormsg,*garbage;
  15. struct MsgPort *MyPort,*replyport;
  16.  
  17. struct Task *mytask; /* Pointer to this task so we can name it */
  18.  
  19. int err;
  20. /*
  21.  * end() -  Notifies Paragon that we are done and ready to continue with
  22.  *        the BBS.  ALWAYS use this to exit from your program, or
  23.  *        the BBS will go to never-never land.
  24.  */
  25.  
  26. void end()
  27. {
  28.     doormsg->command = 20;
  29.     PutMsg(MyPort,(struct Message *)doormsg);
  30.     (void)WaitPort(replyport);
  31.     (void)GetMsg(replyport);
  32.     FreeMem(doormsg,(long)sizeof(*doormsg));
  33.     DeletePort(replyport);
  34.     exit(0);
  35. }
  36.  
  37. /*
  38.  * getsvar(typ,mstring) - Gets certain string variables from Paragon.
  39.  * "mstring" is a pointer to a string to dump the string into.  "typ" tells
  40.  * it what you want: 1=Name, 2=Password, 3=Address, 4=City, 5=State
  41.  * 6=Postal code, 7=Door pathname, 8=Default BBS pathname.
  42.  */
  43.  
  44. void getsvar(typ,mstring)
  45. int typ;
  46. char *mstring;
  47. {
  48.     doormsg->data = typ;
  49.     doormsg->command = 14;
  50.     PutMsg(MyPort,(struct Message *)doormsg);
  51.     (void)WaitPort(replyport);
  52.     strcpy(mstring,doormsg->string);
  53.     (void)GetMsg(replyport);
  54. }
  55.  
  56. /*
  57.  * sendmessage(mstring,nl) - Sends a message to the local window and to
  58.  * the modem (if applicable).  "mstring" is the output string you want to
  59.  * send, "nl" is and integer which is 1 if you want it to send the
  60.  * c/r+l/f combination, or 0 if not.
  61.  */
  62.  
  63. void
  64. sendmessage(mstring,nl)
  65. char mstring[];
  66. int nl;
  67. {
  68.     doormsg->data = nl;
  69.     doormsg->command = 1;
  70.     strcpy(doormsg->string,mstring);
  71.     PutMsg(MyPort,(struct Message *)doormsg);
  72.     (void)WaitPort(replyport);
  73.     (void)GetMsg(replyport);
  74. }
  75.  
  76. /*
  77.  * hotkey(mstring,ostring) - outputs the string "mstring" and waits
  78.  * for one key which it will place in element [0] of "ostring".
  79.  * "mstring" may be a null string, in which case it will only wait for
  80.  * the key, and not output any prompt.
  81.  */
  82.  
  83. void
  84. hotkey(mstring,ostring)
  85. char mstring[];
  86. char *ostring;
  87. {
  88.     strcpy(doormsg->string,mstring);
  89.     doormsg->command = 8;
  90.     PutMsg(MyPort,(struct Message *)doormsg);
  91.     (void)WaitPort(replyport);
  92.     (void)GetMsg(replyport);
  93.     strcpy(ostring,doormsg->string);
  94. }
  95.  
  96. /*
  97.  * prompt(mstring,ostring,len) - outputs the string "mstring" and inputs
  98.  * a string which is placed in ostring.  'len' is the maximum number of
  99.  * characters which will be accepted.
  100.  */
  101.  
  102. void
  103. prompt(mstring,ostring,len)
  104. char mstring[];
  105. char *ostring;
  106. int len;
  107. {
  108.     strcpy(doormsg->string,mstring);
  109.     doormsg->data=len;
  110.     doormsg->command = 6;
  111.     PutMsg(MyPort,(struct Message *)doormsg);
  112.     (void)WaitPort(replyport);
  113.     (void)GetMsg(replyport);
  114.     strcpy(ostring,doormsg->string);
  115. }
  116.  
  117.  
  118. /* showfile(mstring) shows the text file which mstring is the path to.
  119.    It handles ^C aborting, and ^S/^Q pausing. */
  120.  
  121. void
  122. showfile(mstring)
  123. char mstring[];
  124. {
  125.     strcpy(doormsg->string,mstring);
  126.     doormsg->command = 10;
  127.     PutMsg(MyPort,(struct Message *)doormsg);
  128.     (void)WaitPort(replyport);
  129.     (void)GetMsg(replyport);
  130. }
  131.  
  132. /****************************************************
  133.     These two functions were added by
  134.          SWhite. MAX's BBS only!
  135. ****************************************************/
  136. /* enter a menu function to execute 1-33 */
  137. void
  138. domenu(menu,extra,filename)
  139. int menu,extra;
  140. char *filename;
  141.  {
  142.     strcpy(doormsg->string,filename);
  143.     doormsg->command = menu+100;
  144.     doormsg->data     = extra;
  145.     PutMsg(MyPort,(struct Message *)doormsg);
  146.     (void)WaitPort(replyport);
  147.     (void)GetMsg(replyport);
  148.  }
  149.  
  150. /* change user information 1-15 */
  151. void
  152. changeuserint(number,val)
  153. int number;
  154. long val;
  155.  {
  156.     long *ptr;
  157.  
  158.     ptr = (long *)&doormsg->string;    /* We need a long value not a ptr */
  159.     *ptr = val;
  160.     
  161.     doormsg->command = 200;
  162.     doormsg->data    = number;
  163.     PutMsg(MyPort,(struct Message *)doormsg);
  164.     (void)WaitPort(replyport);
  165.     (void)GetMsg(replyport);
  166.  }
  167.         
  168.  
  169. void
  170. main(argc,argv)
  171. int argc;
  172. char *argv[];
  173. {
  174.     char buffer[81],buffer2[81],line_number;
  175.     char cportname[12];    /* ReplyPort and Control Port names */
  176.     long value;
  177.  
  178.  
  179.     /* Pull out the line number from the argv field to find where we are */
  180.     
  181.     line_number=argv[1][0];
  182.     
  183.     mytask=(struct Task *)FindTask(0L);
  184.     mytask->tc_Node.ln_Name = "DoorExample";
  185.     
  186.     /* Create the Reply port, with the name based on the number... */
  187.     
  188.     sprintf(buffer,"DoorReply%c",line_number);
  189.     replyport=(struct MsgPort *)CreatePort(buffer,0L);
  190.     
  191.     doormsg=(struct DoorMsg *)AllocMem((long)sizeof(*doormsg),MEMF_PUBLIC);
  192.     
  193.     if(doormsg==0)
  194.     {
  195.         puts("Couldn't allocate DoorMsg!");
  196.         return;
  197.     }
  198.     
  199.     doormsg->Door_Msg.mn_Node.ln_Type = NT_MESSAGE;
  200.     doormsg->Door_Msg.mn_ReplyPort = replyport;
  201.     doormsg->Door_Msg.mn_Length = (UWORD)sizeof(*doormsg);
  202.     
  203.     /* Locate the correct DoorControl port based on the line number */
  204.     
  205.     sprintf(cportname,"DoorControl%c",line_number);
  206.        MyPort=(struct MsgPort *)FindPort(cportname);
  207.        if(MyPort==0L) 
  208.     {
  209.         puts("DoorControl port not located!");
  210.         FreeMem(doormsg,(long)sizeof(*doormsg));
  211.         return;
  212.     }
  213.     
  214.     sendmessage("\r\nHi there!\r\n",1);
  215.     hotkey("Press any key to continue...",buffer);    
  216.  
  217.     for(;;)
  218.      {
  219.         prompt("\nEnter some text (CR to Exit) : ",buffer,20);
  220.         if(buffer[0] == NULL) break;
  221.           strcpy(buffer2,"\nYou typed : ");
  222.         strcat(buffer2,buffer);
  223.            sendmessage(buffer2,1);
  224.      }
  225.     
  226.     prompt("\nEnter a filename to print : ",buffer,64);
  227.     showfile(buffer);
  228.  
  229.     sendmessage("\nHere is some info on you and the bbs...",1);
  230.     getsvar(1,buffer);
  231.     strcpy(buffer2,"Name : ");
  232.     strcat(buffer2,buffer);
  233.     sendmessage(buffer2,1);
  234.  
  235.     getsvar(2,buffer);
  236.     strcpy(buffer2,"Password : ");
  237.     strcat(buffer2,buffer);
  238.     sendmessage(buffer2,1);
  239.  
  240.     getsvar(3,buffer);
  241.     strcpy(buffer2,"Address : ");
  242.     strcat(buffer2,buffer);
  243.     sendmessage(buffer2,1);
  244.  
  245.     getsvar(4,buffer);
  246.     strcpy(buffer2,"City : ");
  247.     strcat(buffer2,buffer);
  248.     sendmessage(buffer2,1);
  249.  
  250.     getsvar(5,buffer);
  251.     strcpy(buffer2,"State : ");
  252.     strcat(buffer2,buffer);
  253.     sendmessage(buffer2,1);
  254.  
  255.     getsvar(6,buffer);
  256.     strcpy(buffer2,"Postcode : ");
  257.     strcat(buffer2,buffer);
  258.     sendmessage(buffer2,1);
  259.     
  260.     getsvar(7,buffer);
  261.     strcpy(buffer2,"Door Path : ");
  262.     strcat(buffer2,buffer);
  263.     sendmessage(buffer2,1);
  264.  
  265.     getsvar(8,buffer);
  266.     strcpy(buffer2,"Default path : ");
  267.     strcat(buffer2,buffer);
  268.     sendmessage(buffer2,1);
  269.  
  270.  
  271.     prompt("\nEnter a user int to change (1-15, CR to skip) : ",buffer,5);
  272.     if(buffer[0] != NULL)
  273.          {
  274.         prompt("\nEnter new value : ",buffer2,10);
  275.         changeuserint(atoi(buffer),atol(buffer2));
  276.      }
  277.             
  278.     prompt("\nEnter a menu function number : (1-33, CR to skip) : ",buffer,5);
  279.     if(buffer[0] != NULL)
  280.      {
  281.         prompt("\nEnter a value for Extra : ",buffer2,5);
  282.         value = atoi(buffer2);
  283.         prompt("\nEnter a value for Name/FileName/Dest : ",buffer2,80);
  284.         domenu(atoi(buffer),value,buffer2);
  285.      }
  286.  
  287.     end();
  288. }
  289.  
  290.  
  291.